home *** CD-ROM | disk | FTP | other *** search
Wrap
/* ** AREXX Modul for a DOpus GUI MPEG-Soundplaying Layer 1, 2 & 3 ** Displays Songname, MPEG-Quality, Playtime in a Dopus Progress Window. ** ** Needed: Directory Opus V5.5+ (© by Jonathan Potter & GPSoftware) ** mpega >= V3.1 (© 1995-97 by Stephane Tavenard) ** ** Optional: ** Melody MPEG-Soundcard (© 1997 KATO) ** MPEGPlay by Thorsten Hansen V1.0+ ** PeggyPlus MPEG-Card (© Ingenierbuero Helfrich) ** Toccata, Prelude, Delfina-Soundcard & other Soundcard with AHI-Driver ** AHI Retargetable Audio System (© by Martin Blom) ** ** ** $VER: OpusMPEGA.dopus5 3.0 (20.3.98) ©1995-1998 by Eckhard Ludwig (Eckhard@top.east.de) [Emailware] ** ** This program is Email-Ware ! ** ** Installation: ** Copy to DOpus5:Modules ** Install the Filetypes (ID = MP2 for Layer-2, ID = MP3 for Layer-3)! ** ** Usage: ** Select mpegaudio files and click the Play Button ** If you want to skip a sound a file press the abort button. ** To abort the complete Player abort two soundplayings in the first 5 secs. ** more functions in the Appicon Menu ** Für deutsche Texte OpusMPEGA.catalog installieren. */ Player = "MPEGA" /* alternative: MELODY PEGGYPLAYER PEGGYMELODY CD32 */ PlayMPEG = "C:MPEGA.040" /* Path Softwareplayer Layer-3 */ PlayMelody = "C:MPEGPlay" /* Path Melody Hardwareplayer */ MPEGA_OPTIONS="-p0 -T -f0 -d2 -q2" /* MPEGA Optionen, Default Amiga Paula */ BREAKMPEG = "C:BreakName" /* Path MPEGA Breaktool */ MP3INF="C:MP3INFO" HELPPATH="DOpus5:Help/OpusMPEGA.guide" SETUPPATH="SYS:Prefs/OpusMPEGA" signal on syntax options failat 21 options results LF='0a'x parse arg portname function oldsource dest arguments address value portname dopus version if (result='RESULT' | TRANSLATE(result,'.',' ') < 5.1218) then do dopus request '"This module (OpusMPEGA.dopus5)"'LF'"requires DOpus V5.5 or greater." Exit' exit end if ~show('l','rexxsupport.library') then call addlib('rexxsupport.library',0,-30,0) if ~show('l','rexxsupport.library') then do dopus request '"Error ... (OpusMPEGA.dopus5)"'LF'"Couldnt open rexxsupport.library!?" Exit' exit end if ~show(l,'locale.library') then call addlib('locale.library',0,-30) if show(l,'locale.library') then catalog=opencatalog('OpusMPEGA.catalog','english',0) if open(1,'Env:OpusMPEGA.prefs','R') then do do i=1 to 14 prefs.i = readln(1) end if prefs.2 ~="" then PlayMelody=prefs.2 if prefs.3 ~="" then PlayMPEG=prefs.3 if prefs.4 ~="" then BREAKMPEG=prefs.4 if prefs.5 ~="" then MPEGA_OPTIONS=prefs.5 if prefs.6 ~="" then Player=prefs.6 if prefs.12 ~="" then HELPPATH=prefs.12 if prefs.13 ~="" then SETUPPATH=prefs.13 if prefs.14 ~="" then MP3INF=prefs.14 call close(1) end if function='init' then do dopus command "OpusMPEGA" program "OpusMPEGA" desc '"'getcatstr(3,'Play Selected Sounds')'"' source if prefs.7~='PLAYOFF' then dopus command "Play" program "OpusMPEGA" desc '"'getcatstr(3,'Play Selected Sounds')'"' source if prefs.8='ICONOFF' then exit end else if function~='Play'&function~='OpusMPEGA' then exit if ~openport('mpegport') then do dopus send 'mpegport' 'ADD 'oldsource exit end mpmenu.count=14 mpmenu.0=getcatstr(14,'Open File(s)') mpmenu.1='TAG Info' mpmenu.2=getcatstr(20,'Help') mpmenu.3=getcatstr(13,'Preferences') mpmenu.4="---" mpmenu.5=getcatstr(18,'Previous') mpmenu.6=getcatstr(19,'Play') mpmenu.7=getcatstr(21,'Stop') mpmenu.8=getcatstr(22,'Next') mpmenu.9="---" mpmenu.10=getcatstr(15,'Hide') mpmenu.11=getcatstr(16,'Show') mpmenu.12="---" mpmenu.13=getcatstr(1,'Beenden') dopus addappicon 'mpegport' '"Opus MPEGA"' 100 icon "DOpus5:Icons/OpusMPEGAAppIcon" info quotes close menu mpmenu apphandle=result if exists(prefs.11) then LOADPATH='"'prefs.11'"' else LOADPATH="RAM:" if function~='init' & ~exists(PlayMPEG) then do ADDRESS VALUE portname dopus request '"'getcatstr(9,'Fatal Error ...'LF''LF'MPEGA by Stéphane TAVENARD not found?!'LF'path to command: '"'%s'"'',PlayMPEG)'"' getcatstr(17,'OK|Preferences|Help') if RC=0 then command run HELPPATH else if RC=2 then command run SETUPPATH exit end if function~='init' & ~exists(BREAKMPEG) then do ADDRESS VALUE portname dopus request '"'getcatstr(10,'Error ...'LF''LF'Breaktool by Kai Iske not found?!'LF'path to command: '"'%s'"'',BREAKMPEG)'"' getcatstr(17,'OK|Preferences|Help') if RC=0 then command run HELPPATH else if RC=2 then command run SETUPPATH end k=0 j=0 lister query oldsource selentries DATA=result if READALL()=5 then do dopus remappicon apphandle call closeport('mpegport') exit end /*-------Schleife mpegport----------------------------------------------------------------------------*/ do forever STOP=0 Arg1=0 if k=0 then do call waitpkt('mpegport') packet=getpkt('mpegport') if packet='00000000'x then iterate call MESSAGE if k=0 then iterate end address command BREAKMPEG" "PlayMPEG" C" If Show("P","DELITRACKER") then address 'DELITRACKER' 'QUIT' If Show("P","RXTRACKER") then address 'RXTRACKER' 'QUIT' DUMMY=delay(20) address value portname lister new toolbar DUMMY handle=result lister set handle title 'Opus MPEGA' lister set handle label 'Opus MPEGA' lister set handle header 'MPx Audioplayer V3.0, ©1998 by Eckhard@top.east.de' lister set handle namelength 100 lister set handle sort name select when prefs.9='SIZEON' & prefs.10='COMMENTON' then lister set handle display comment size name when prefs.9='SIZEON' then lister set handle display comment size when prefs.10='COMMENTON' then lister set handle display comment name otherwise lister set handle display comment end lister set handle busy on call ADDFILES(0) lister set handle newprogress name info bar abort lister refresh handle full do until j=k do while STOP=1 If waitpkt('mpegport') then do packet=getpkt('mpegport') if packet='00000000'x then iterate call MESSAGE select when result=13|Arg1="EXIT" then STOP=1 when result=8|Arg1="NEXT" then do lister select handle '"'right(j+1,3," ")'.'substr(SONG.j,pos("@COMMENT=",SONG.j)+9)'"' off lister refresh handle j=Min(j+1,k-1) end when result=5|Arg1="PREVIOUS" then j=Max(j,1)-1 when result=6|Arg1="PLAY"|result=20 then j=j otherwise iterate end lister set handle newprogress name info bar abort STOP=0 end end if (Arg1="menu"&Arg3=13)|Arg1="EXIT" then leave Titel=left(SONG.j,pos("@SIZE",SONG.j)-2) if ~exists(Titel) then iterate ADDRESS VALUE portname dopus getfiletype '"'Titel'"' id DT=result APOS=lastpos("/",Titel) if APOS=0 then APOS=lastpos(":",Titel) songname=substr(Titel,APOS+1) SEC=0 NOABORT=0 lister select handle '"'right(j+1,3," ")'.'substr(SONG.j,pos("@COMMENT=",SONG.j)+9)'"' on lister refresh handle If DT="MP3"|Player="MPEGA" then do if Player="PEGGYPLAYER" & show('P','Peggy') then address 'Peggy' QUIT If (Player="MELODY"|Player="PEGGYMELODY"|Player="CD32") & show('P','MPEGPLAY.1') then address 'MPEGPLAY.1' 'QUIT' address command "RUN >NIL: "PlayMPEG" <nil: "MPEGA_OPTIONS" " '"'Titel'"' " >PIPE:MPEGA" if ~Open('MPEGAOUT','PIPE:MPEGA','r') then do address command BREAKMPEG" "PlayMPEG" C" ADDRESS VALUE portname dopus front lister request handle '"'getcatstr(7,'System Error ...'LF'DEVS:DOSDrivers/PIPE not installed?!')'"' getcatstr(1,'Quit') leave end MPEGAV = readln('MPEGAOUT') if substr(MPEGAV,11,3)>=3.3 then MPEGAV=substr(MPEGAV,5,9)||substr(MPEGAV,19) else VMPEGA=1 parse var MPEGAV MPEGAV "(C)" do until readln('MPEGAOUT')="" end BUFFER="" DUMMY="" do until DUMMY='0D'x DUMMY=readch('MPEGAOUT',1) BUFFER=BUFFER||DUMMY end if VMPEGA=1 then do PM=substr(BUFFER,1,2) PS=substr(BUFFER,4,2) CD=substr(BUFFER,7,pos('0A'x,BUFFER)-7) end else do PM=substr(BUFFER,pos('length:',BUFFER)+12,2) PS=substr(BUFFER,pos('length:',BUFFER)+15,2) CD=substr(BUFFER,pos('Type:',BUFFER)+10) CD=left(CD,pos('1B'x,CD)-1) end TIME=PM*60+PS adress value portname lister set handle newprogress title MPEGAV do until Eof('MPEGAOUT') do until readch('MPEGAOUT',1)='0D'x|Eof('MPEGAOUT') end if PM>=0 then do lister set handle newprogress bar TIME SEC lister set handle newprogress info PM":"PS" "songname if SEC<4 then lister set handle newprogress name left(getcatstr(12,'For Quit press now Abort:')' Countdown '4-SEC,40)' 'j+1' of 'k else lister set handle newprogress name left(CD,37)' 'j+1' of 'k end SEC=SEC+1 PS=right(PS-1,2,0) if PS<0 then do PS=59 PM=right(PM-1,2,0) end lister query handle abort if result then leave packet=getpkt('mpegport') if packet~='00000000'x then do call MESSAGE if result=7|Arg1="STOP" then do address command BREAKMPEG" "PlayMPEG" C" CALL Close('MPEGAOUT') j=j-1 STOP=1 address value portname lister clear handle progress leave end if result=8|Arg1="NEXT" then leave if result=5|Arg1="PREVIOUS" then do j=Max(j,1)-2 leave end end if result=13|Arg1="EXIT" then leave end address command BREAKMPEG" "PlayMPEG" C" call close('MPEGAOUT') if TIME>5 & SEC<6 & NOABORT=0 then leave end if DT="MP2"&(Player="MELODY"|Player="PEGGYMELODY"|Player="CD32") then do if Player="MELODY" & exists(PlayMelody) & ~show('P','MPEGPLAY.1') then do call pragma('STACK',10000) address command 'run >NIL: <NIL: 'PlayMelody' DEV=melodympeg.device BUFF=32000 NBUFF=10 PUBSCREEN='portname 'waitforport MPEGPLAY.1' address 'MPEGPLAY.1' 'hidegui' end if Player="PEGGYMELODY" & exists(PlayMelody) & ~show('P','MPEGPLAY.1') then do call pragma('STACK',10000) address command 'run >NIL: <NIL: 'PlayMelody' DEV=peggympeg.device BUFF=5000 NBUFF=20 PUBSCREEN='portname 'waitforport MPEGPLAY.1' address 'MPEGPLAY.1' 'hidegui' end if Player="CD32" & exists(PlayMelody) & ~show('P','MPEGPLAY.1') then do call pragma('STACK',10000) address command 'run >NIL: <NIL: 'PlayMelody' DEV=mpeg.device BUFF=32000 NBUFF=10 PUBSCREEN='portname 'waitforport MPEGPLAY.1' address 'MPEGPLAY.1' 'hidegui' end address value portname lister set handle newprogress title "MPEGPlay ©1997 by Thorsten Hansen" if ~show('P','MPEGPLAY.1') then do dopus front lister request handle '"'getcatstr(11,'Fatal Error ...'LF''LF'MPEGPlay by Thorsten Hansen not found?!'LF'Path to Command: '"'%s'"''LF'For Setup select Player-Setup !',PlayMelody)'"' getcatstr(1,'Quit') leave end address 'MPEGPLAY.1' 'play' Titel PM="00" PS="00" do forever address value portname lister set handle newprogress bar k j+1 lister set handle newprogress info PM":"PS" "songname if SEC<4 then lister set handle newprogress name left(getcatstr(12,'For Quit press now Abort:')' Countdown '4-SEC,40)' 'j+1' of 'k else lister set handle newprogress name j+1' of 'k DUMMY=Delay(48) address 'MPEGPLAY.1' 'playstate' if result=1 then leave SEC=SEC+1 PS=right(PS+1,2,0) if PS=60 then do PS="00" PM=right(PM+1,2,0) end packet=getpkt('mpegport') if packet~='00000000'x then do call MESSAGE if result=7|Arg1="STOP" then do address 'MPEGPLAY.1' 'stop' j=j-1 STOP=1 address value portname lister clear handle progress leave end if result=8|Arg1="NEXT" then leave if result=5|Arg1="PREVIOUS" then do j=Max(j,1)-2 leave end end if result=13|Arg1="EXIT" then leave lister query handle abort if result then leave end address 'MPEGPLAY.1' 'stop' if SEC<5 & NOABORT=0 then leave end if DT="MP2"&Player="PEGGYPLAYER" then do if showlist("A","PEGGYPLUS")=1 & ~show('P','Peggy') then do call pragma('STACK',8192) address command 'run >NIL: <NIL: PEGGYPLUS:MPEGPlayer' 'waitforport Peggy' DUMMY=Delay(10) end address value portname lister set handle newprogress bar k j+1 lister set handle newprogress title "PEGGY plus MPEG-Player" lister set handle newprogress info songname lister set handle newprogress name j+1' of 'k if ~show('P','Peggy') then do dopus front lister request handle '"'getcatstr(8,'Fatal Error ...'LF''LF'Peggy-Plus MPEG Player not found !'LF'Please run Peggy-Player first.')'"' getcatstr(1,'Quit') leave end address 'Peggy' open '"'Titel'"' if PEGGYFIRST~=1 then do setwindow XOFF 0 YOFF 0 WIDTH 1 HEIGHT 1 XPIC 0 YPIC 0 PEGGYFIRST=1 Play end else do Play async Play wait end address value portname lister query handle abort if result then leave packet=getpkt('mpegport') if packet~='00000000'x then do call MESSAGE if result=13|Arg1="EXIT" then leave end end address value portname lister clear handle abort lister select handle '"'right(j+1,3," ")'.'substr(SONG.j,pos("@COMMENT=",SONG.j)+9)'"' off lister refresh handle j=j+1 if (Arg1="menu"&Arg3=13)|Arg1="EXIT" then leave end lister set handle busy off lister close handle PEGGYFIRST=0 j=0 k=0 if Player="PEGGYPLAYER" & show('P','Peggy') then address 'Peggy' QUIT If (Player="MELODY"|Player="PEGGYMELODY"|Player="CD32") & show('P','MPEGPLAY.1') then address 'MPEGPLAY.1' 'QUIT' end /*-------QUIT----------------------------------------------------------------------------*/ Ende: address value portname lister clear handle progress lister set handle busy off lister close handle dopus remappicon apphandle call closeport('mpegport') if Arg1="EXIT" then exit if Player="PEGGYPLAYER" & show('P','Peggy') then address 'Peggy' QUIT If show('P','MPEGPLAY.1') then address 'MPEGPLAY.1' 'QUIT' exit /*------- Message from mpegport----------------------------------------------------------*/ MESSAGE: Arg1=getarg(packet,0) Arg2=getarg(packet,1) Arg3=getarg(packet,2) Arg4=getarg(packet,3) reply(packet,10) NOABORT=1 if word(Arg1,1)='ADDSONG'|word(Arg1,1)='PLAYSONG' then do pos1=pos('"',Arg1)+1 addname=substr(Arg1,pos1,pos('"',Arg1,pos1+1)-pos1) dopus getfiletype '"'addname'"' id if result="MP2"|result="MP3" then do if word(Arg1,1)='PLAYSONG' then do lister close handle PEGGYFIRST=0 j=0 k=0 lister clear handle lister clear handle abort end /*lister query playhandle entry '"'addname'"' stem fileinfo.*/ fileinfo.size=0 fileinfo.comment="" SONG.k=addname' @SIZE='fileinfo.size' @COMMENT='fileinfo.comment lister add handle '"'right(k+1,3," ")'.'fileinfo.comment'" 'fileinfo.size' -1 'k' r 'addname'' lister select handle '"'right(k+1,3," ")'.'fileinfo.comment'"' on lister refresh handle k=k+1 end return 20 end if word(Arg1,1)="ADD" then do oldsource=word(Arg1,2) lister query oldsource selentries DATA=result l=k call READALL() call ADDFILES(l) return end if (Arg1="menu"&Arg3=13)|Arg1="close"|Arg1="QUIT"|Arg1="EXIT"|Arg1="STOP" then do if DT="MP3"|Player="MPEGA" then do address command BREAKMPEG" "PlayMPEG" C" call close('MPEGAOUT') end if show('P','MPEGPLAY.1')&DT="MP2"&(Player="MELODY"|Player="PEGGYMELODY"|Player="CD32") then address 'MPEGPLAY.1' 'stop' if Arg1="close"|Arg1="QUIT" then call Ende return Arg3 end if Arg2~=100 then return if Arg1="info"|Arg1="doubleclick" then do dopus request '"'getcatstr(23,'Opus MPEGA'LF'The Definitive MPEG Audio Player for Directory Opus'LF''LF'©1995-1998 by Eckhard Ludwig [Emailware]'LF'Plays MPEG Audio Layer-2&3 and Wave MPs'LF''LF'Greets... Stéphane Tavenard (mpega)'LF'Martin Blom (AHI) Thomas Wenzel (Play16)...')'"' getcatstr(17,'OK|Preferences|Help') if RC=0 then command run HELPPATH else if RC=2 then command run SETUPPATH end if Arg1="menu" then do if Arg3=0 then do address command 'requestfile DRAWER 'LOADPATH' PATTERN #?.MP? TITLE "'getcatstr(24,'Select MPx Audiofile(s)...')'" MULTISELECT NOICONS >PIPE:MPDATA' if RC>0 then return if ~Open('MP','PIPE:MPDATA','r') then return DATA = readln('MP') call close('MP') pos1=2 do forever pos2=pos('"',DATA,pos1+1) if pos2=0 then leave addname=substr(DATA,pos1,pos2-pos1) pos1=pos2+3 dopus getfiletype '"'addname'"' id if result="MP2"|result="MP3" then do pos3=lastpos("/",addname) if pos3=0 then pos3=pos(":",addname) LOADPATH=left(addname,pos3) SONG.k=addname' @SIZE=0 @COMMENT='addname lister add handle '"'right(k+1,3," ")'.'addname'" 1 -1 'k' r 'substr(addname,pos3+1)'' lister select handle '"'right(k+1,3," ")'.'addname'"' on lister refresh handle k=k+1 end end return end if Arg3=1 then do if exists(MP3INF) then address command MP3INF' -f' '"%a-%t%N%l %y%N%c%N%V Layer-%A%N%bkbps %FHz %M%N%mm:%ss%N%i Bytes "' '"'Titel'"' ' >PIPE:MP3INFO' else address command PlayMPEG" -h -s " '"'Titel'"' " >PIPE:MP3INFO" if ~Open('MP','PIPE:MP3INFO','r') then return DATA=Titel||LF do until Eof('MP') DATA=DATA||readch('MP',1) end call close('MP') lister request handle '"'DATA'"' end if Arg3=2 then command run HELPPATH if Arg3=3 then command run SETUPPATH if Arg3=10 then lister iconify handle if Arg3=11 then lister iconify handle off end if Arg1="dropfrom" then do dropsource=Arg4 lister query dropsource path droppfad=result pos1=2 do forever pos2=pos('"',Arg3,pos1+1) if pos2=0 then leave addname=substr(Arg3,pos1,pos2-pos1) pos1=pos2+3 lister query dropsource entry '"'addname'"' stem fileinfo. if fileinfo.type >0 then do l=k lister new toolbar DUMMY droppfad||fileinfo.name source=result lister wait source if READSOURCE(1)=5 then return call ADDFILES(l) end else do dopus getfiletype '"'droppfad||addname'"' id if result="MP2"|result="MP3" then do lister query dropsource entry '"'addname'"' stem fileinfo. SONG.k=droppfad||addname' @SIZE='fileinfo.size' @COMMENT='fileinfo.comment lister add handle '"'right(k+1,3," ")'.'fileinfo.comment'" 'fileinfo.size' -1 'k' r 'addname'' lister select handle '"'right(k+1,3," ")'.'fileinfo.comment'"' on lister refresh handle k=k+1 end end end end return Arg3 /*---------Files in Playlister eintragen----------------------------------------------------------------------*/ ADDFILES: parse arg Arg1 address value portname do i=Arg1 to k-1 SPOS=pos("@SIZE=",SONG.i) CPOS=pos("@COMMENT=",SONG.i) Titel=left(SONG.i,SPOS-2) APOS=lastpos("/",Titel) if APOS=0 then APOS=lastpos(":",Titel) lister add handle '"'right(i+1,3," ")'.'substr(SONG.i,CPOS+9)'" 'substr(SONG.i,SPOS+6,CPOS-SPOS-6)' -1 'i' r 'substr(Titel,APOS+1)'' lister select handle '"'right(i+1,3," ")'.'substr(SONG.i,CPOS+9)'"' on end lister refresh handle return /*-------Read All-------------------------------------------------------------------------*/ READALL: lister query oldsource path droppfad=result pos1=2 do forever pos2=pos('"',DATA,pos1+1) if pos2=0 then leave addname=substr(DATA,pos1,pos2-pos1) pos1=pos2+3 lister query oldsource entry '"'addname'"' stem fileinfo. if fileinfo.type >0 then do lister new toolbar DUMMY droppfad||fileinfo.name source=result lister wait source if READSOURCE(1)=5 then do lister set oldsource busy off return 5 end lister select oldsource '"'addname'"' off lister refresh oldsource full end else do source=oldsource if READSOURCE(0)=5 then do lister set oldsource busy off return 5 end lister query oldsource numseldirs if result=0 then leave end end lister set oldsource busy off return 0 /*-------Read Source-----------------------------------------------------------------------*/ READSOURCE: parse arg Arg1 address value portname lister set source busy on lister query source path QuellPfad=result if Arg1=1 then lister query source files stem files. else lister query source selfiles stem files. lister set source newprogress name file bar abort lister set source newprogress title getcatstr(4,'Scanning files ...') lister refresh source full do i=0 to files.count-1 lister query source abort if result then do lister refresh source full lister set source busy off if Arg1=1 then lister close source k=l return 5 end lister set source newprogress bar files.count i+1 lister set source newprogress name files.i lister set source newprogress file files.count i+1 lister select source '"'files.i'"' off lister refresh source full Titel=Quellpfad||files.i dopus getfiletype '"'Titel'"' id if result="MP2"|result="MP3" then do lister query source entry '"'files.i'"' stem fileinfo. SONG.k=Titel' @SIZE='fileinfo.size' @COMMENT='fileinfo.comment k=k+1 end end lister set source busy off if Arg1=1 then lister close source return 0 /*-------Locale-------------------------------------------------------------------------*/ getcatstr: parse arg msgno,msgstring,insert.1,insert.2 if catalog~=0 then msgstring=getcatalogstr(catalog,msgno,msgstring) CNT=0 do while pos('%s',msgstring)>0 parse var msgstring fore '%s' aft CNT=CNT+1 msgstring=fore||insert.CNT||aft end return msgstring /*---------------------------------------------------------------*/ syntax: if rc=13 then call Ende /* Melody MPEGPlay oder PeggyPlayer wurde über GUI beendet */ say 'Syntax Error' rc',' errortext(rc) 'in line' sigl'.' return